/**
 * 骑手位置地图数据适配器
 * 将getRiderInfo API返回的数据转换为TencentMap组件需要的格式
 */

/**
 * 转换骑手位置数据为地图标记点格式
 * @param {Object} riderData - getRiderInfo API返回的数据
 * @param {Object} orderData - 订单数据（可选）
 * @returns {Object} 包含markers数组和center的对象
 */
export function convertRiderDataToMapMarkers(riderData, orderData = {}) {
  const markers = [];
  let center = null;

  // 验证数据有效性
  if (!riderData || !riderData.data) {
    console.warn('骑手数据无效');
    return { markers: [], center: getDefaultCenter() };
  }

  const { rider_info, order_no } = riderData.data;

  // 处理骑手位置标记
  if (rider_info && rider_info.location) {
    const { latitude, longitude, name, mobile } = rider_info;
    
    // 检查坐标有效性
    if (isValidCoordinate(latitude, longitude)) {
      markers.push({
        id: `rider-${order_no}`,
        lat: parseFloat(latitude),
        lng: parseFloat(longitude),
        title: '配送员位置',
        address: name ? `配送员：${name}` : '配送员位置',
        description: mobile ? `联系电话：${mobile}` : '',
        infoContent: createRiderInfoContent(rider_info, order_no),
        type: 'rider'
      });

      // 设置地图中心点为骑手位置
      center = {
        lat: parseFloat(latitude),
        lng: parseFloat(longitude)
      };
    }
  }

  // 处理目的地位置标记（如果有订单数据）
  if (orderData && orderData.delivery_latitude && orderData.delivery_longitude) {
    const destLat = parseFloat(orderData.delivery_latitude);
    const destLng = parseFloat(orderData.delivery_longitude);

    if (isValidCoordinate(destLat, destLng)) {
      markers.push({
        id: `destination-${order_no}`,
        lat: destLat,
        lng: destLng,
        title: '收货地址',
        address: orderData.receiver_address || '收货地址',
        description: orderData.receiver_name ? `收货人：${orderData.receiver_name}` : '',
        infoContent: createDestinationInfoContent(orderData),
        type: 'destination'
      });

      // 如果没有骑手位置，使用目的地作为中心点
      if (!center) {
        center = { lat: destLat, lng: destLng };
      }
    }
  }

  // 如果没有有效坐标，使用默认中心点
  if (!center) {
    center = getDefaultCenter();
  }

  return {
    markers,
    center,
    hasValidData: markers.length > 0
  };
}

/**
 * 检查坐标是否有效
 * @param {number|string} lat - 纬度
 * @param {number|string} lng - 经度
 * @returns {boolean}
 */
function isValidCoordinate(lat, lng) {
  const latitude = parseFloat(lat);
  const longitude = parseFloat(lng);
  
  return !isNaN(latitude) && 
         !isNaN(longitude) && 
         latitude !== 0 && 
         longitude !== 0 &&
         latitude >= -90 && latitude <= 90 &&
         longitude >= -180 && longitude <= 180;
}

/**
 * 获取默认地图中心点（北京天安门）
 * @returns {Object}
 */
function getDefaultCenter() {
  return {
    lat: 39.908823,
    lng: 116.397470
  };
}



/**
 * 创建骑手信息窗口内容
 * @param {Object} riderInfo - 骑手信息
 * @param {string} orderNo - 订单号
 * @returns {string} HTML内容
 */
function createRiderInfoContent(riderInfo, orderNo) {
  const { name, mobile } = riderInfo;
  
  return `
    <div class="map-info-window">
      <h4>🚴 配送员信息</h4>
      ${name ? `<p><i class="el-icon-user"></i> 姓名：${name}</p>` : ''}
      ${mobile ? `<p><i class="el-icon-phone"></i> 电话：${mobile}</p>` : ''}
      ${orderNo ? `<p><i class="el-icon-document"></i> 订单：${orderNo}</p>` : ''}
      <p><i class="el-icon-location"></i> 实时位置</p>
      <div style="margin-top: 8px; padding-top: 8px; border-top: 1px solid #EBEEF5;">
        <small style="color: #909399;">位置更新时间：${new Date().toLocaleTimeString()}</small>
      </div>
    </div>
  `;
}

/**
 * 创建目的地信息窗口内容
 * @param {Object} orderData - 订单数据
 * @returns {string} HTML内容
 */
function createDestinationInfoContent(orderData) {
  const { receiver_name, receiver_phone, receiver_address } = orderData;
  
  return `
    <div class="map-info-window">
      <h4>📍 收货地址</h4>
      ${receiver_name ? `<p><i class="el-icon-user"></i> 收货人：${receiver_name}</p>` : ''}
      ${receiver_phone ? `<p><i class="el-icon-phone"></i> 电话：${receiver_phone}</p>` : ''}
      ${receiver_address ? `<p><i class="el-icon-location-outline"></i> 地址：${receiver_address}</p>` : ''}
    </div>
  `;
}

/**
 * 计算两点间距离（简单估算）
 * @param {Object} point1 - 第一个点 {lat, lng}
 * @param {Object} point2 - 第二个点 {lat, lng}
 * @returns {number} 距离（米）
 */
export function calculateDistance(point1, point2) {
  if (!point1 || !point2) return 0;
  
  const R = 6371000; // 地球半径（米）
  const lat1Rad = point1.lat * Math.PI / 180;
  const lat2Rad = point2.lat * Math.PI / 180;
  const deltaLatRad = (point2.lat - point1.lat) * Math.PI / 180;
  const deltaLngRad = (point2.lng - point1.lng) * Math.PI / 180;

  const a = Math.sin(deltaLatRad / 2) * Math.sin(deltaLatRad / 2) +
    Math.cos(lat1Rad) * Math.cos(lat2Rad) *
    Math.sin(deltaLngRad / 2) * Math.sin(deltaLngRad / 2);
  
  const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  return Math.round(R * c);
}

/**
 * 格式化距离显示
 * @param {number} distance - 距离（米）
 * @returns {string} 格式化的距离字符串
 */
export function formatDistance(distance) {
  if (distance < 1000) {
    return `${distance}米`;
  }
  return `${(distance / 1000).toFixed(1)}公里`;
}

/**
 * 创建地图配置对象
 * @param {Object} options - 配置选项
 * @returns {Object} TencentMap组件配置
 */
export function createMapConfig(options = {}) {
  const {
    width = '100%',
    height = '400px',
    zoom = 12,
    showControls = true,
    mapType = 'roadmap'
  } = options;

  return {
    width,
    height,
    zoom,
    showControls,
    mapType
  };
}